package jangdolbaeng2.seller.action;

import jangdolbaeng2.seller.dao.ProductManagerDAO;
import jangdolbaeng2.seller.dao.SellerDao;
import jangdolbaeng2.tools.Base64Converter;
import jangdolbaeng2.vo.ProductVO;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import oracle.net.aso.s;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

// 작성자 : 진승민
// 기능 : 상점 상품 등록 수정 삭제 조회
public class ProductManagerAction extends ActionSupport implements  SessionAware {
	
	private int addPdt; // 상품제어
	
	private Integer product_seq; //상품 시퀀스
	private Integer delSeq; //상품  삭제 시퀀스
	private Integer update_product_seq; //상품 업데이트 시퀀스
	private ProductVO product; // 상품
	private ProductVO updateProduct; // 갱신용 상품
	private HashMap<String,String> categoryMap; // 카테고리 정보맵
	private List<ProductVO> ProductList; // 상품 리스트	
	// 그림 파일 처리용 변수들
	private List<File> uploads = new ArrayList<>(); // 파일 
	private List<String> uploadsContentType = new ArrayList<>(); //유형
	private List<String> uploadsFileName = new ArrayList<>(); // 파일명
	private File saveFile; //저장용 파일 
	private static final String UploadPath = "C:/test/";
	private SessionMap<String,Object> sessionMap;  
	private char product_category;
	private int updateResult;  // 업데이트 확인용 변수 1이면 성공 0 은 실패
	
	private String imageIndex1; // 1번 그림 수정 여부 확인 플래그 
	private String imageIndex2; // 2번 그림 수정 여부 확인 플래그
	
	// 세션 의존적주입
	@Override
	public void setSession(Map<String, Object> arg0) {
		sessionMap=(SessionMap<String, Object>)arg0;		
	}
	
	// 상품 상세 조회
	public String getOneProduct(){
		//System.out.println(update_product_seq);
		ProductManagerDAO dao = new ProductManagerDAO();
		product =dao.getOneProduct(update_product_seq);
		return category();
	}

	// 상품 조회 리스트 	
	public String listProduct(){
		ProductManagerDAO dao = new ProductManagerDAO();		
		ProductList=dao.list((Integer) sessionMap.get("shop_seq"));
		return category();
	}	
		
	// 상품 등록 메소드
	public String addProduct(){
		if (addPdt==1){
		ProductManagerDAO dao = new ProductManagerDAO();		
		List<String> list = multiUpload(); // 업로드된 사진을 리스트로 담아옴
		if (list.size()==2){
		product.setProduct_image1(list.get(0)); // 사진1 입력
		product.setProduct_image2(list.get(1)); // 사진 2 입력
		}		
		dao.addProduct(product);
		}
		return listProduct();
	}
	
	// 상품 수정 메소드
	public String updateProduct(){
		ProductManagerDAO dao = new ProductManagerDAO();
		List<String> list = multiUpload(); // 업로드된 사진을 리스트로 담아옴
		if (imageIndex1.equals("true")&&imageIndex2.equals("false"))
		product.setProduct_image1(list.get(0)); // 사진1 입력
		if (imageIndex2.equals("true")&&imageIndex1.equals("false"))
		product.setProduct_image2(list.get(0)); // 사진 2 입력
		if (imageIndex1.equals("true")&&imageIndex2.equals("true"))  {
			// 사진 1 2 입력
			product.setProduct_image1(list.get(0)); 
			product.setProduct_image2(list.get(1)); 
		}
		updateResult=dao.updateProduct(product);
		//System.out.println(updateResult);
		return category();
	}	
	// 상품 삭제 메소드
	public String delProduct(){
		ProductManagerDAO dao = new ProductManagerDAO();
		System.out.println("삭제 시퀀스: :" +delSeq);
		dao.deleteProduct(delSeq);		
		return listProduct();
	}	
	
	// 카테고리 추출 메소드
	public String category(){
		categoryMap = new SellerDao().category();		
		return SUCCESS;
	}
	
	// 멀티 파일 업로드용 메소드
		public List<String> multiUpload() {
			List<String> images = new ArrayList<String>();
			// 이미지를 텍스트로 변환 시키는 툴
			Base64Converter b64c = new Base64Converter();			
			// Null Check
			for (int index = 0; index < uploads.size(); index++) {
				File destFile = new File(UploadPath + uploadsFileName.get(index));
				try {
					FileUtils.copyFile(uploads.get(index), destFile);
				} catch (IOException e) {
					e.printStackTrace();
				}
				images.add(b64c.imageMaker(destFile.getPath()));
			}
			return images;
		}

	public ProductVO getProduct() {
		return product;
	}

	public void setProduct(ProductVO product) {
		this.product = product;
	}

	public HashMap<String, String> getCategoryMap() {
		return categoryMap;
	}

	public void setCategoryMap(HashMap<String, String> categoryMap) {
		this.categoryMap = categoryMap;
	}
	
	public List<File> getUploads() {
		return uploads;
	}

	public void setUploads(List<File> uploads) {
		this.uploads = uploads;
	}

	public List<String> getUploadsContentType() {
		return uploadsContentType;
	}

	public void setUploadsContentType(List<String> uploadsContentType) {
		this.uploadsContentType = uploadsContentType;
	}

	public List<String> getUploadsFileName() {
		return uploadsFileName;
	}

	public void setUploadsFileName(List<String> uploadsFileName) {
		this.uploadsFileName = uploadsFileName;
	}

	public Integer getProduct_seq() {
		return product_seq;
	}

	public void setProduct_seq(Integer product_seq) {
		this.product_seq = product_seq;
	}

	public List<ProductVO> getProductList() {
		return ProductList;
	}

	public void setProductList(List<ProductVO> productList) {
		ProductList = productList;
	}

	public String getImageIndex1() {
		return imageIndex1;
	}

	public void setImageIndex1(String imageIndex1) {
		this.imageIndex1 = imageIndex1;
	}

	public String getImageIndex2() {
		return imageIndex2;
	}

	public void setImageIndex2(String imageIndex2) {
		this.imageIndex2 = imageIndex2;
	}

	public char getProduct_category() {
		return product_category;
	}

	public void setProduct_category(char product_category) {
		this.product_category = product_category;
	}
	
	public Integer getUpdate_product_seq() {
		return update_product_seq;
	}

	public void setUpdate_product_seq(Integer update_product_seq) {
		this.update_product_seq = update_product_seq;
	}

	public ProductVO getUpdateProduct() {
		return updateProduct;
	}

	public void setUpdateProduct(ProductVO updateProduct) {
		this.updateProduct = updateProduct;
	}

	public int getUpdateResult() {
		return updateResult;
	}

	public void setUpdateResult(int updateResult) {
		this.updateResult = updateResult;
	}

	public Integer getDelSeq() {
		return delSeq;
	}

	public void setDelSeq(Integer delSeq) {
		this.delSeq = delSeq;
	}

	public int getAddPdt() {
		return addPdt;
	}

	public void setAddPdt(int addPdt) {
		this.addPdt = addPdt;
	}	
	
	
	
}
